package gui;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Scanner;

import domein.DomeinController;

public class Cui
{
/*Attributen*/
	private DomeinController domeinController;
	private ResourceBundle berichten;
	Scanner input = new Scanner(System.in);

/*Constructor*/
	public Cui(DomeinController controller)
	{
		this.domeinController = controller;
	}
		
/*Nieuwe Main*/
	public void start()
	{	
		System.out.println("RAC-PROJECT\n============");
		this.inloggen();
		this.selecteerTaal();
		this.keuzeMenu();
		
		this.maakHuurOvereenkomst();
	}
	
/*Methodes*/
	/*Start*/
	public void inloggen()
	{
		String naam,pwd;	
		
		println("Log in aub!\n------------");
		do
		{
			print("Gebruikersnaam:");
				naam = input.nextLine();
			print("Wachtwoord:");
				pwd = domeinController.md5(input.nextLine());//hash het paswoord
				//pwd = input.nextLine();
				//System.out.println(pwd);
			if(!domeinController.loginMedewerker(naam,pwd).equals("ok"))
				println(domeinController.loginMedewerker(naam,pwd));
		}
		while(!domeinController.loginMedewerker(naam,pwd).equals("ok"));
		println("Je bent ingelogd!");
	}
	public void selecteerTaal()
	{
		String taal;
		int keuze = domeinController.getIngelogdeMedewerker().getTaal();//geen goeie constructie! geen objecten in gui!
		switch(keuze)
	    {
	    	case 1:
	    		taal = "en";
	    		break; 
			case 2:
				taal = "fr";
	            break;
			default:
				taal = "nl";
                break;
		}
	    this.berichten = ResourceBundle.getBundle("MessagesBundle",new Locale(taal));
	}
	public void keuzeMenu()
	{
		int keuze;
		do
		{
			System.out.println("\nMenu:\n-----");
			System.out.println("1: " + berichten.getString("huurovereenkomst1"));
			System.out.println("2: " + berichten.getString("huurwagens1"));
			System.out.println("3: " + berichten.getString("klanten1"));
			System.out.println("4: " + berichten.getString("medewerkers1"));
			System.out.println("5: " + berichten.getString("afsluiten"));
			System.out.print(berichten.getString("keuze1") + ":");
			keuze = input.nextInt();
		}
		while(keuze<=0 || keuze>5 );
		switch(keuze)
		{
			case 1:
				this.maakHuurOvereenkomst();
				this.keuzeMenu();
				break;
			case 2:
				this.beheerHuurwagens();
				this.keuzeMenu();
				break;
			case 3:
				this.beheerKlanten();
				this.keuzeMenu();
				break;
			case 4:
				this.beheerMedewerkers();
				this.keuzeMenu();
				break;
			case 5:
				break;
		}		
	}

	/*Keuze*/
	//Maak huurovereenkomst
	public void maakHuurOvereenkomst()
	{
		boolean keuzeWagenOk=false,keuzeKlantOk=false;
		boolean extraVerzekering=false;
		int keuze=0;
		String boeken="";
		
	//vraagt de beginperiode
		println("Huurperiode");
		println("beginperiode");
		domeinController.setBeginDatum(this.vraagDatum());
	
		//vraagt de eindperiode
		println("eindperiode:");
		domeinController.setEindDatum(this.vraagDatum());
		
	//maak lijst met wagens beschikbaar
		println("Beschikbare auto's:\n");
		println(domeinController.maakLijstBeschikbareWagens());
		
	//details en selectie van een wagen
		while(!keuzeWagenOk)
		{
			print("Van welke auto wilt u de details zien?:");
			keuze=input.nextInt();
				keuze--;//voor intern gebruik
			print(domeinController.selecteerHuurwagen(keuze));
			print("\nWilt u deze wagen boeken?(ja/nee):");
			boeken = input.next();
			if(boeken.equals("ja"))
				keuzeWagenOk=true;
		}
		
	//maak lijst met klanten
		println("Beschikbare klanten:\n");
		println(domeinController.maakLijstKlanten());
		
	//details en selectie van een klant
		while(!keuzeKlantOk)
		{
			print("Van welke klant wilt u de details zien?:");
			keuze=input.nextInt();
				keuze--;
			print(domeinController.selecteerKlant(keuze));
			print("\nWilt u deze klant selecteren?(ja/nee):");
			boeken = input.next();
			if(boeken.equals("ja"))
				keuzeKlantOk=true;
		}
			
	//leg huurovereenkomst vast
		//nu nog vragen van extra waarborg etc
		domeinController.registreerHuurovereenkomst();
		
		println("Overzicht huurovereenkomst:");
		println("OvereenkomstId:");//moet nog komen!
		println("Opmaakdatum: " + datumOmzet(domeinController.getHuidigeDatum()));
		println("Afhaalplaats:" + domeinController.getHuidigeAuto().getAfhaalplaats());
		println("Van: "+ datumOmzet(domeinController.getBeginDatum()));
		println("Tot: " +datumOmzet(domeinController.getEindDatum()));
		println("Standaard dagprijs:" + domeinController.getHuidigeAuto().getDagprijs());
		
			
		println("Extra verzekering:");
		print("Wilt u een extra verzekering nemen?(ja/nee):");
		boeken = input.next();
		if(boeken.equals("ja"))
		{
			do{
				println("1) Beperkte omnium verzekering:");
				println("2) Omnium verzekering:");
				println("3) Geen extra verzekering:");
				print("Maak u keuze:");
				keuze = input.nextInt();
				domeinController.registreerHuurovereenkomst();
				if(keuze!=3)
				{
					print("Wilt u deze verzekering boeken?(ja/nee):");
					boeken = input.next();
					if(boeken.equals("ja"))
					{
						extraVerzekering=true;
					}
				}
				else
				{
					extraVerzekering=true;
				}
			}
			while(extraVerzekering==false);
		}
		//domeinController.registreerHuurovereenkomst();
	}
	public GregorianCalendar vraagDatum()
	{
		print("Geef de dag:");
			int dag=input.nextInt();
		print("Geef de maand:");
			int maand=input.nextInt()-1;//januari is 0
		print("Geef het jaar:");
			int jaar=input.nextInt();
		GregorianCalendar datum = new GregorianCalendar(jaar, maand, dag);
		return datum;
	}
	
	//Beheer huurwagens
	public void beheerHuurwagens()
	{
		domeinController.geefLijstWagens();
		domeinController.geefHuidigeWagenDetails();
		domeinController.maakWagen();
		domeinController.wijzigWagen();
		domeinController.schrapWagen();
		/*System.out.print("\nWagens");
		 * Geef lijst wagens
		 * geef detailgegevens wagen
		 * maak wagen
		 * wijzig gegevens wagen
		 * schrap wagen
		 */
	}
	
	//Beheer klanten
	public void beheerKlanten()
	{
		println("\nKlanten");
		println("1: Voeg een nieuwe klant toe");
		println("2: Toon klanten");
		print("Kies uit het menu:");
		int keuze = input.nextInt();
		if(keuze==1)
		{
			print("Geef de voornaam van de klant: ");
				String klantVoornaam = input.next();
		
			print("Geef de naam van de klant: ");
				String klantAchternaam = input.next();
		
			print("Geef het adres: ");
				String adres = input.next();
		
			print("Geef postcode: ");
				int postcode = input.nextInt();
		
			print("Geef plaats: ");
				String plaats = input.next();
		
			print("Geef geslacht: ");
				boolean geslacht;
				String geslachttest = input.next();
				if(geslachttest.equals("man"))
					geslacht=true;
				else
					geslacht=false;
					
			print("Geef Geboortedatum: ");
				int geboortedatum = input.nextInt();
		
			print("Geef rijbewijs: ");
				String rijbewijs = input.next();
				
			domeinController.voegKlantToe(klantVoornaam,klantAchternaam,adres,postcode,plaats,geslacht,geboortedatum,rijbewijs);
		}
		else
		{
			println(domeinController.maakLijstKlanten());
		}
		/*
		 * geef lijst klanten
		 * geef detailgegevens klanten
		 * maak klant
		 * wijzig klant
		 * schrap klant
		 */
	}
	
	//Beheer medewerkers
	public void beheerMedewerkers()
	{
		System.out.println("\nMedewerkers:");
		int teller=1;
		for(String eenString : domeinController.maakLijstGebruikers())
		{
			System.out.print(teller + ") ");
			System.out.println(eenString);
			teller++;
		}
		System.out.println("0) Nieuwe gebruiker");
		System.out.println("Selecteer een optie:");
			int a = input.nextInt();
		if(a==0);
			
		/*
		 * geef lijst medewerkers
		 * geef detailgegevens medewerkers
		 * maak medewerker
		 * wijzig medewerker
		 * schrap medewerker
		 */
	}
	
	public String datumOmzet(GregorianCalendar datum)
	{
			return String.format("%02d/%02d/%4d ",
	    			datum.get(Calendar.DAY_OF_MONTH),
	    			datum.get(Calendar.MONTH)+1,
	    			datum.get(Calendar.YEAR)
	    			);
	}
	/*Output*/
	public void print(String output)
	{
		System.out.print(output);
	}
	public void println(String output)
	{
		System.out.println(output);
	}

}
